from django.db import models

# Create your models here.
"""
书籍和人物

书籍：
    id            主键id
    name          名字
    pub_data      发布日期
    readcount     阅读量
    commentcount  评论量
    is_delete     是否删除
    

class Name(models,Model):
    字段名[属性名]=models.类型(选项)
    
字段名[属性名]：
    1.不要使用 Python,MYSQL 关键字
    2.不要使用连续的下划线(__)
    
类型：
    CharField
    DataField
    IntegerField
    BooleanField
    DecimalField     浮点数[保存 金钱]
    
选项：
    CharField 必须设置 max_length
"""


class BookInfo(models.Model):
    # 主键 系统会自动增加
    name = models.CharField(max_length=10)
    pub_date = models.DateField(null=True)
    readcount = models.IntegerField(default=0)
    commentcount = models.IntegerField(default=0)
    is_delete = models.BooleanField(default=False)

    # 当我们在人物表[类]中 添加了外键之后，
    # 系统很人性化 自动给我们添加了一个隐藏的属性
    # 关联模型类名小写_set
    # peopleinfo set = []

    # 固定写法
    class Meta:
        db_table = 'bookinfo'  # 修改表名

    def __str__(self):
        return self.name


"""
人物：
    id            主键id
    name          名字
    gender        性别： 只能是male 和 female
    description   描述
    book_id       外键
"""


class PeopleInfo(models.Model):
    # 选择的列表
    GENDER_CHOICES = (
        (0, 'male'),
        (1, 'female')
    )

    name = models.CharField(max_length=10)
    description = models.CharField(max_length=200)
    is_delete = models.BooleanField(default=False)
    gender = models.SmallIntegerField(choices=GENDER_CHOICES, default=0)

    # 外键
    # 系统会自动给外键添加_id
    # ForeignKey 的第一个参数是 关联的外键模型
    # 外键的选项：
    # 书籍：人物
    # 1：n

    # 黑帮老大 1   ：   小弟 n

    # (1) 老大 挂了就挂了 我们自己选老大
    # (2) 劫狱 不让老大死
    # (3) 老大死了, 小弟也跟着死 殉情

    # 关联的模型 如果删除了，人物的外键数据 应该怎么办???
    # 外键的级联操作 -- 设置为NULL，拒绝删除，级联删除

    # CASCADE级联，删除主表数据时连同一起删除外键表中数据
    # 伏笔.后期我们测试一下,删除一本书籍,看看书籍的人物是否还在

    book = models.ForeignKey(BookInfo, on_delete=models.CASCADE)

    class Meta:
        db_table = 'peopleinfo'

    def __str__(self):
        return self.name
